import pymysql

class DBUtil:
    #定义类属性
    conn=None
    #封装数据库连接
    @classmethod
    def __connect_db(cls):
        cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student", password="iHRM_student_2022",
                                   database="ihrm", charset="utf8")
        return cls.conn

    #封装数据库关闭
    @classmethod
    def __close_db(cls):
        cls.conn.close()


    #数据库查询
    #加上装饰器是为了调用方调用方便，直接类名.方法名
    @classmethod
    def query_db(cls,sql):
        #定义变量
        cursor=None
        result=None
        try:
            #连接数据库
            cls.conn=cls.__connect_db()
            #获取游标
            cursor=cls.conn.cursor()
            #执行sql,返回结果
            cursor.execute(sql)
            result=cursor.fetchone()
        except Exception as err:
            print("读取数据库出错：",err)
        finally:
            #关闭游标
            cursor.close()
            #关闭连接
            cls.__close_db()
            return result



    #数据库增删改
    @classmethod
    def uid_db(cls,sql):
        cursor=None
        try:
            #创建数据库连接
            cls.conn=cls.__connect_db()

            # 获取游标
            cursor=cls.conn.cursor()
            # 执行sql,打印影响数据库的行数，返回结果
            cursor.execute(sql)
            affect_rows=cls.conn.affected_rows()
            print("影响数据库的行数:",affect_rows)
            #事务的提交回滚
            cls.conn.commit()
        except Exception as err:
            print("执行数据库出错:",err)
            cls.conn.rollback()
        finally:
            # 关闭游标
            cursor.close()
            cls.__close_db()

        pass
if __name__ == '__main__':
    DBUtil.uid_db("insert into t_book (id,title,pub_date) values (800,'大鱼海棠','2008-10-11');")
